YAHOO.namespace('Tesis.modelador');

YAHOO.Tesis.modelador.usuariosTable = function(elContainer, messages, listado) {
    this.messages = messages;
    this.listado = listado;
    YAHOO.Tesis.modelador.usuariosTable.superclass.constructor.call(this, elContainer,
    this.construirColumnDefs(), this.construirDataSource(), this.construirConfig());
};

YAHOO.lang.extend(YAHOO.Tesis.modelador.usuariosTable, YAHOO.Tesis.ListTableBase, {
    
    verUsuario: function (idusuario){
       usuariosDialog = new YAHOO.Tesis.dialog('usuariosDialog',Tesis.contextPath + '/pages/usuario/verUsuarios?idusuario=' + idusuario,700,340);
        usuariosDialog.show();
    },
    editarUsuario: function (idusuario){
        usuariosDialog = new YAHOO.Tesis.dialog('usuariosDialog',Tesis.contextPath + '/pages/usuario/crearUsuarios?idusuario=' + idusuario,700,555);
        usuariosDialog.show();
    },
    eliminarUsuario: function (usuarioDTO){
        var self=this;
       $.get("eliminarUsuarios",usuarioDTO,function(data){
           if (!data){
               mensajeValidacion("Error al eliminar el usuario");   
           }
           self.recargarData();
       });
    },
    doBeforeLoadData: function(oRequest, oResponse, oPayload) {
        oPayload.totalRecords = oResponse.meta.totalRecords;
        oPayload.pagination.recordOffset = oResponse.meta.startIndex;
        $("#cantidadRegistros").html(messages.usuariosTable.totalRegistros +" "+oPayload.totalRecords);
        return oPayload;        
    },
    estadoFormatter: function(liner, record, column, data) {
        if (data!=null){
            if (data==Tesis.EstadoAIEnum.ACTIVO) {
                liner.innerHTML = 'Activo';
            } else {
                liner.innerHTML = 'Inactivo';
            }
        }else{
            liner.innerHTML = '--';
        }
    },
    
     accionesFormatter: function(liner, record, column, data) {
        var self = this;
        var linerElement = new YAHOO.util.Element(liner);
       
        linerElement.get('element').innerHTML =
        "<table style='margin-left:auto; margin-right:auto; width: 50px; border:0px !important;'><tr><td><div class='ver'></div></td><td><div class='editar'></div></td><td><div class='eliminar'></div></td></tr></table>";
         
        linerElement.delegate('click', function() {
            var idusuario=record.getData().idusuario;
            //console.log(idusuario);
            self.editarUsuario(idusuario);
        }, '.editar');
        self.setAccionTooltip(linerElement,  '.editar', "editar", 5000);

        linerElement.delegate('click', function() {
           var idusuario=record.getData().idusuario;
            //console.log(idusuario);
           self.verUsuario(idusuario);
        }, '.ver');
        self.setAccionTooltip(linerElement,  '.ver', "ver", 5000);
        
        linerElement.delegate('click', function() {
            var usuarioDTO=record.getData();
             //Confirmar("¿Está seguro que desea eliminar al usuario? ", null,{}, 
            //function(){self.eliminarUsuario(usuarioDTO);});
            self.eliminarUsuario(usuarioDTO);
        }, '.eliminar');
        self.setAccionTooltip(linerElement,  '.eliminar', "eliminar", 5000);
        
    },
    construirColumnDefs: function() {
        return [
          
            {
                key: 'idusuario',
                hidden: true
            },
            
            {
                key: 'nombre',
                label: 'Nombre'
            },
            {
                key:'apellidopaterno',
                label: 'Paterno'
                
            },
            {
                key:'apellidomaterno',
                label: 'Materno'
                
            },
            {
                key:'esactivo',
                label: 'Estado',
                formatter:this.estadoFormatter
            },
            {
                key: 'acciones',
                label: this.messages.usuariosTable.columna.accion,
                minWidth: 70,
                maxWidth: 70,
                className: 'accionesColumn',
                formatter: this.accionesFormatter
            }
        ];
    },
    construirDataSource: function() {
        var dataSource = new YAHOO.util.XHRDataSource(Tesis.contextPath + "/pages/usuario/findUsuarios?");
        dataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;


        dataSource.responseSchema = {
            resultsList: "lstUsuariosDTO",
            metaFields: {
                totalRecords: "totalRecords",
                startIndex: "startIndex"
            },
            fields: [ {key: 'idusuario'}, {key: 'nombre'},{key:'apellidopaterno'},{key:'apellidomaterno'},{key:'esactivo'}]
        };

        return dataSource;
    },
    construirConfig: function() {

        return {
            MSG_LOADING: 'Cargando...',
            MSG_EMPTY :'No se encontraron datos.',
            MSG_ERROR: "Error cargando datos, es muy probable que la sesión haya expirado.. <a href='" + Tesis.contextPath + "/pages/public/login'>Haga clic aquí para volver a acceder al sistema.</a>",
            generateRequest: this.generarRequest,
            initialLoad: false,
            initialRequest:this.generarRequest(),
            dynamicData: true,           
            paginator : new YAHOO.widget.Paginator({        
                rowsPerPage: this.messages.usuariosTable.paginacion.filasxpagina,
                containers:  "cargosPaginator", //contenedor
                firstPageLinkLabel: this.messages.usuariosTable.paginacion.inicio,
                lastPageLinkLabel: this.messages.usuariosTable.paginacion.fin,
                previousPageLinkLabel: this.messages.usuariosTable.paginacion.anterior,
                nextPageLinkLabel: this.messages.usuariosTable.paginacion.siguiente,
                pageLinkClass: 'pageLinkClass',
                template: "{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
            })
        }
    },
    generarRequest: function(oState, oSelf) {
      oState = oState || {
            pagination: null,
            sortedBy: null
        };

        var sort = (oState.sortedBy) ? oState.sortedBy.key : "idusuario";
        var dir = (oState.sortedBy && oState.sortedBy.dir === YAHOO.widget.DataTable.CLASS_DESC) ? "desc" : "asc";
        var startIndex = (oState.pagination) ? oState.pagination.recordOffset : 0;
        var results = (oState.pagination) ? oState.pagination.rowsPerPage : this.messages.usuariosTable.paginacion.filasxpagina;
        var nombre =$('#nombre').val();
        var appPaterno = $('#apellidopaterno').val();
        var appMaterno = $('#apellidomaterno').val();
        

        var forceIERequest = new Date().getTime();

        return 'sort=' + sort +
               '&dir=' + dir +
               '&startIndex=' + startIndex +
               '&results=' + (startIndex + results) +
               '&nombre=' + nombre +
               '&apellidopaterno=' + appPaterno +
               '&apellidomaterno=' + appMaterno +
               '&temp='+forceIERequest;
               
    },
    recargarData: function() {
        var self = this;
            oCallback = {
                success: self.onDataReturnInitializeTable,
                failure: self.onDataReturnSetRows,
                scope: self,
                argument: self.getState()
            };
        self.getDataSource().sendRequest(self.generarRequest(), oCallback);
        
    },
    tieneRegistros: function(){
        return this.getRecordSet().getLength()>0;
    }
   
});